<?php
declare(strict_types=1);

namespace App\Repository\Cache;

use App\Exception\BusinessException;
use App\Repository\BaseCacheRepository;

/**
 * 用户相关缓存
 */
class UserCacheRepository extends BaseCacheRepository
{
    protected function getKeyPrefix(): string
    {
        $user = 'user';
        $userInfo = 'user_info';
        return $user . ":" . $userInfo;
    }

    /**
     * 设置用户缓存
     * @param string $email 用户邮箱
     * @param array $userInfo 用户数据
     * @return bool
     */
    public function setUserInfoByEmail(string $email, array $userInfo): bool
    {

        // 校验必要参数
        if (empty($email)) {
            throw new BusinessException('参数(email)缺失');
        }

        try {
            $this->set($email, json_encode($userInfo), 0);// 设置缓存时间 不过期
        } catch (\Throwable $ex) {
            throw new BusinessException('缓存写入失败');
        }

        return true;
    }

    /**
     * 根据邮箱获取用户缓存数据
     * @param string $email 用户email
     * @return array
     */
    public function getUserInfoByEmail(string $email): array
    {
        try {
            return $this->get($email) ?? [];
        } catch (\Throwable $ex) {
            throw new BusinessException('缓存查询失败');
        }
    }

    /**
     * 设置用户缓存
     * @param string $id 用户id
     * @param array $userInfo 用户数据
     * @return bool
     */
    public function setUserInfoById(string $id, array $userInfo): bool
    {

        // 校验必要参数
        if (empty($id)) {
            throw new BusinessException('参数(id)缺失');
        }

        try {
            $this->set($id, json_encode($userInfo), 0); // 设置缓存时间 不过期
        } catch (\Throwable $ex) {
            throw new BusinessException('缓存写入失败');
        }

        return true;
    }

    /**
     * 根据邮箱获取用户缓存数据
     * @param string $id 用户id
     * @return array
     */
    public function getUserInfoById(string $id): array
    {
        try {
            return $this->get($id) ?? [];
        } catch (\Throwable $ex) {
            throw new BusinessException('缓存查询失败');
        }
    }

}
